package com.alstudio.net.protocol.xmpp.data;

import java.io.Serializable;
import java.util.ArrayList;

/**
 * 本类用于描述用户对象，封装了用户id、昵称、性别、生日、电话号码、email、签名、地理位置信息 在线状态等相应的信息。扩展时请按照相应的格式加入，
 * 
 * @author Alonso lee
 * 
 */
public class User implements Serializable {

	private static final long serialVersionUID = -7323314018400761124L;

	// 用户id
	private String jid = "";
	// 用户昵称
	private String nick = "";
	// 用户性别
	private String sex = "";
	// 详细地理位置信息
	private String location = "";
	// 与我之间的距离
	private String distance = "";
	// 在线状态
	private boolean isOnline = false;
	// vip状态
	private boolean isVip = false;
	// 省份
	private String province = "";
	// 城市
	private String city = "";
	// 生日
	private String birthDay = "";
	// 电话号码
	private String phone = "";
	// email
	private String email = "";
	// 个性签名
	private String signature = "";
	// 人气信息
	private String popular = "";
	// 密码
	private String pwd = "";

	// 保存图片属性
	private ArrayList<Photo> photoList = new ArrayList<Photo>();
	// 图片个数
	private int numOfPic = 0;
	// 好友与我的订阅关系
	private String subscription = "";
	// 家乡
	private String hometown = "";

	/**
	 * 在线状态 离线 0 空闲 1 忙碌 2 免打扰 3
	 */
	private int status = -1;

	/**
	 * 构造函数
	 * 
	 * @author Alonso lee
	 */
	public User() {
	}

	/**
	 * 构造函数
	 * 
	 * @param jid
	 *            jid
	 * @author Alonso lee
	 */
	public User(String jid) {
		if (jid != null) {
			this.jid = jid;
		}
	}

	/**
	 * 构造函数
	 * 
	 * @param jid
	 * @param nick
	 * @author Alonso lee
	 */
	public User(String jid, String nick) {
		if (jid != null) {
			this.jid = jid;
		}

		if (nick != null) {
			this.nick = nick;
		}
	}

	/**
	 * 设置用户jid
	 * 
	 * @param jid
	 * @author Alonso lee
	 */
	public void setJid(String jid) {
		if (jid != null) {
			if (jid.indexOf("/") != -1) {
				jid = jid.substring(0, jid.indexOf("/"));
			}
			this.jid = jid;
		}
	}

	/**
	 * 获取用户jid
	 * 
	 * @return 用户jid
	 * @author Alonso lee
	 */
	public String getJid() {
		return this.jid;
	}

	/**
	 * 设定昵称
	 * 
	 * @param nick
	 *            昵称
	 * @author Alonso lee
	 */
	public void setNick(String nick) {
		if (nick != null) {
			this.nick = nick;
		}
	}

	/**
	 * 获取昵称
	 * 
	 * @return 该用户昵称
	 * @author Alonso lee
	 */
	public String getNick() {
		return this.nick;
	}

	/**
	 * 设定用户性别
	 * 
	 * @param sex
	 *            性别
	 * @author Alonso lee
	 */
	public void setSex(String sex) {
		if (sex != null) {
			this.sex = sex;
		}
	}

	/**
	 * 获取用户性别
	 * 
	 * @return 用户性别
	 * @author Alonso lee
	 */
	public String getSex() {
		return this.sex;
	}

	/**
	 * 设定用户地理位置
	 * 
	 * @param location
	 *            用户地理位置
	 * @author Alonso lee
	 */
	public void setLocation(String location) {
		if (location != null) {
			this.location = location;
		}
	}

	/**
	 * 获取用户地理位置
	 * 
	 * @return 用户地理位置
	 * @author Alonso lee
	 */
	public String getLocation() {
		return this.location;
	}

	/**
	 * 设定该用户与我之间的距离
	 * 
	 * @param distance
	 *            该用户与我之间的距离
	 * @author Alonso lee
	 */
	public void setDistance(String distance) {
		if (distance != null) {
			this.distance = distance;
		}
	}

	/**
	 * 获取该用户与我之间的距离
	 * 
	 * @return 该用户与我之间的距离
	 * @author Alonso lee
	 */
	public String getDistance() {
		return this.distance;
	}

	/**
	 * 设定在线状态
	 * 
	 * @param online
	 *            true为在线。false为离线
	 * @author Alonso lee
	 */
	public void setOnline(boolean online) {
		this.isOnline = online;
	}

	/**
	 * 获取用户是否在线
	 * 
	 * @return true，用户在线
	 * @author Alonso lee
	 */
	public boolean isOnline() {
		return this.isOnline;
	}

	/**
	 * 设定在线状态
	 * 
	 * @param status
	 *            离线 0 空闲 1 忙碌 2 免打扰 3
	 * @author Alonso lee
	 */
	public void setStatus(int status) {
		this.status = status;
	}

	/**
	 * 获取用户是否在线
	 * 
	 * @author ccx
	 */
	public int getStatus() {
		return this.status;
	}

	/**
	 * 设定省份
	 * 
	 * @param province
	 *            省份
	 * @author Alonso lee
	 */
	public void setProvince(String province) {
		if (province != null) {
			this.province = province;
		}
	}

	/**
	 * 获取省份
	 * 
	 * @return 省份
	 * @author Alonso lee
	 */
	public String getProvince() {
		return this.province;
	}

	/**
	 * 设定城市
	 * 
	 * @param city
	 *            城市
	 * @author Alonso lee
	 */
	public void setCity(String city) {
		if (city != null) {
			this.city = city;
		}
	}

	/**
	 * 获取城市
	 * 
	 * @return 城市
	 * @author Alonso lee
	 */
	public String getCity() {
		return this.city;
	}

	/**
	 * 设定生日
	 * 
	 * @param birthDay
	 *            生日
	 * @author Alonso lee
	 */
	public void setBirthday(String birthDay) {
		if (birthDay != null) {
			this.birthDay = birthDay;
		}
	}

	/**
	 * 获取生日
	 * 
	 * @return 生日
	 * @author Alonso lee
	 */
	public String getBirtyday() {
		return this.birthDay;
	}

	/**
	 * 设定电话
	 * 
	 * @param phone
	 *            电话
	 * @author Alonso lee
	 */
	public void setPhone(String phone) {
		if (phone != null) {
			this.phone = phone;
		}
	}

	/**
	 * 获取电话
	 * 
	 * @return 电话
	 * @author Alonso lee
	 */
	public String getPhone() {
		return this.phone;
	}

	/**
	 * 设定email
	 * 
	 * @param email
	 * @author Alonso lee
	 */
	public void setEmail(String email) {
		if (email != null) {
			this.email = email;
		}
	}

	/**
	 * 获取email
	 * 
	 * @return email
	 * @author Alonso lee
	 */
	public String getEmail() {
		return this.email;
	}

	/**
	 * 设定是否是VIP
	 * 
	 * @param vip
	 *            true vip
	 * @author Alonso lee
	 */
	public void setIsVip(boolean vip) {
		this.isVip = vip;
	}

	/**
	 * 获取是否是VIP
	 * 
	 * @return true vip
	 * @author Alonso lee
	 */
	public boolean isVip() {
		return this.isVip;
	}

	/**
	 * 设置个性签名
	 * 
	 * @param signature
	 *            个性签名
	 * @author Alonso lee
	 */
	public void setSignature(String signature) {
		if (signature != null) {
			this.signature = signature;
		}
	}

	/**
	 * 获取个性签名
	 * 
	 * @return 个性签名
	 * @author Alonso lee
	 */
	public String getSignature() {
		return this.signature;
	}

	/**
	 * 设定图片列表
	 * 
	 * @param photoList
	 *            图片列表
	 * @author Alonso lee
	 */
	public void setPhotos(ArrayList<Photo> photoList) {
		this.photoList = photoList;
	}

	/**
	 * 获取图片列表
	 * 
	 * @return 图片列表
	 * @author Alonso lee
	 */
	public ArrayList<Photo> getPhotos() {
		return this.photoList;
	}

	/**
	 * 设定好友与我的订阅关系
	 * 
	 * @param subscription
	 *            好友与我的订阅关系
	 * @author Alonso lee
	 */
	public void setSubscription(String subscription) {
		if (subscription != null) {
			this.subscription = subscription;
		}
	}

	/**
	 * 获取好友与我的订阅关系
	 * 
	 * @return 好友与我的订阅关系。当前只有有效值为"to"。表示本机订阅了该用户。
	 * @author Alonso lee
	 */
	public String getSubscription() {
		return this.subscription;
	}

	/**
	 * 设定我的人气信息
	 * 
	 * @param p
	 * @author Alonso lee
	 */
	public void setPopularity(String p) {
		if (p != null) {
			this.popular = p;
		}
	}

	/**
	 * 获取我的人气信息
	 * 
	 * @return
	 * @author Alonso lee
	 */
	public String getPopularity() {
		return this.popular;
	}

	/**
	 * 设定密码
	 * 
	 * @param pwd
	 * @author Alonso lee
	 */
	public void setPwd(String pwd) {
		if (pwd != null) {
			this.pwd = pwd;
		}
	}

	/**
	 * 获取密码
	 * 
	 * @param pwd
	 * @return
	 * @author Alonso lee
	 */
	public String getPwd() {
		return this.pwd;
	}

	/**
	 * 设定家乡所在地
	 * 
	 * @param home
	 */
	public void setHomeTown(String home) {
		if (home != null) {
			this.hometown = home;
		}
	}

	/**
	 * 获取家乡所在地
	 * 
	 * @return
	 */
	public String getHomeTown() {
		return this.hometown;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((jid == null) ? 0 : jid.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (jid == null) {
			if (other.jid != null)
				return false;
		} else if (!jid.equals(other.jid))
			return false;
		return true;
	}
	
}
